<?php

/**
 * Description of TratamientoServicios
 *
 * @author  Mariano Renkine
 * @author  Fernando Arau
 */
class TratamientoServicios extends Servicios
{

  function agregar(TratamientoDTO $tratamientoDTO)
  {
    $repo = new RepoTratamiento();
    $tratamiento = $this->deDTO($tratamientoDTO);
    return $repo->agregar($tratamiento);
  }

  function modificar(TratamientoDTO $tratamientoDTO)
  {
    $repo = new RepoTratamiento();
    return $repo->modificar($this->deDTO($tratamientoDTO));
  }

  function buscar($id)
  {
    $repo = new RepoTratamiento();
    $tratamiento = $repo->buscar($id);
    return $this->aDTO($tratamiento);
  }

  function listarHabilitados()
  {
    $repo = new RepoTratamiento();
    $tratamientos = $repo->listar();
    $tratamientosDTO = null;
    foreach ($tratamientos as $tratamiento)
    {
      $tratamientosDTO[] = $this->aDTO($tratamiento);
    }
    return $tratamientosDTO;
  }

  function listar()
  {
    $repo = new RepoTratamiento();
    $tratamientos = $repo->listar();
    $tratamientosDTO = null;
    foreach ($tratamientos as $tratamiento)
    {
      $tratamientosDTO[] = $this->aDTO($tratamiento);
    }
    return $tratamientosDTO;
  }

  /**
   * Busca los Tratamientos que pueden realizarse en un Gabiente
   * @param type $idGabinete
   * @return array Tratamiento
   */
  function buscarTratamientoPorGabinete($idGabinete)
  {
    $repo = new RepoTratamiento();
    return $repo->buscarTratamientoPorGabinete($idGabinete);
  }

  function listarKeyValues()
  {
    $tratamientos = $this->listar();
    if ($tratamientos != null && count($tratamientos) > 0)
    {
      for ($i = 0; $i < count($tratamientos); $i++)
      {
        $resultado[$i]["key"] = $tratamientos[$i]->getId();
        $resultado[$i]["value"] = $tratamientos[$i]->getNombre();
      }
    } else
    {
      $resultado[0]["key"] = "";
      $resultado[0]["value"] = "";
    }
    return $resultado;
  }

  function listarKeyValuesHabilitados()
  {
    $tratamientos = $this->listarHabilitados();
    if ($tratamientos != null && count($tratamientos) > 0)
    {
      for ($i = 0; $i < count($tratamientos); $i++)
      {
        $resultado[$i]["key"] = $tratamientos[$i]->getId();
        $resultado[$i]["value"] = $tratamientos[$i]->getNombre();
      }
    } else
    {
      $resultado[0]["key"] = "";
      $resultado[0]["value"] = "";
    }
    return $resultado;
  }

  function listarIdName()
  {
    $tratamientos = $this->listar();
    if ($tratamientos != null && count($tratamientos) > 0)
    {
      for ($i = 0; $i < count($tratamientos); $i++)
      {
        $resultado[$i]["id"] = $tratamientos[$i]->getId();
        $resultado[$i]["name"] = $tratamientos[$i]->getNombre();
      }
    } else
    {
      $resultado[0]["id"] = "";
      $resultado[0]["name"] = "";
    }
    return $resultado;
  }

  /**
   * Verifica si un Tratamiento puede realizarse en un determinado Gabinete
   * @param type $idGabinete
   * @param type $idTratamiento
   * @return bool
   */
  function validarGabinete($idGabinete, $idTratamiento)
  {
    $repoTratamiento = new RepoTratamiento();
    return $repoTratamiento->validarGabinete($idGabinete, $idTratamiento);
  }

  function aDTO(Tratamiento $tratamiento)
  {
    $tratamientoDTO = new TratamientoDTO();
    $tratamientoDTO->setDescripcion($tratamiento->getDescripcion());
    $tratamientoDTO->setDuracion($tratamiento->getDuracion());
    $tratamientoDTO->setNombre($tratamiento->getNombre());
    $tratamientoDTO->setId($tratamiento->getId());
    $tratamientoDTO->setPrecio($tratamiento->getPrecio());
    $tratamientoDTO->setTerapeutas($tratamiento->getTerapeutas());
    $tratamientoDTO->setProductos($tratamiento->getProductos());
    $tratamientoDTO->setGabinetes($tratamiento->getGabinetes());
    $tratamientoDTO->setUsuario($tratamiento->getUsuario());
    return $tratamientoDTO;
  }

  function deDTO(TratamientoDTO $tratamientoDTO)
  {
    $tratamiento = new Tratamiento();
    $tratamiento->setDescripcion($tratamientoDTO->getDescripcion());
    $tratamiento->setDuracion($tratamientoDTO->getDuracion());
    $tratamiento->setId($tratamientoDTO->getId());
    $tratamiento->setNombre($tratamientoDTO->getNombre());
    $tratamiento->setUsuario($tratamientoDTO->getUsuario());
    $gabineteServicios = new GabineteServicios();
    /* @var $gabinete GabineteDTO */
    if (is_array($tratamientoDTO->getGabinetes()))
    {
      $gabinetes = null;
      foreach ($tratamientoDTO->getGabinetes() as $gabinete)
      {
        $gabinetes[] = $gabineteServicios->buscarGabinete($gabinete->getId());
      }
      $tratamiento->setGabinetes($gabinetes);
    }
    $tratamiento->setPrecio($tratamientoDTO->getPrecio());
    if (is_array($tratamientoDTO->getProductos()))
    {
      $productos = null;
      $productoServicios = new ProductoServicios();
      foreach ($tratamientoDTO->getProductos() as $producto)
      {
        $productos[] = $productoServicios->deDTO($producto);
      }
      $tratamiento->setProductos($productos);
    }
    return $tratamiento;
  }

  function eliminar($id)
  {
    $repoTratamiento = new RepoTratamiento();
    return $repoTratamiento->eliminar($id);
  }

}

?>
